﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace Soundless_Project
{
    class Personagem : Objeto2D // Classe extendida da classe Objeto2D
    {
        public KeyboardState teclado;
        public bool movimentoX, movimentoY,apertou;
        public Vector2 max_velocidade, aceleracao, atrito;

        public Personagem(Texture2D textura) :
            base(textura)
        {
            apertou = false;
            movimentoX = false;                              //
            movimentoY = false;                              //
            max_velocidade.X = 3;                            //
            max_velocidade.Y = 3;                            //
            aceleracao.X = 5;                                //   variáveis exclusivas da classe Personagem
            aceleracao.Y = 5;                                //
            atrito.X = 0.05f;                                //
            atrito.Y = 0.05f;                                //
            escala = 0.7f;
        }

        public void Update()
        {
            movimentoY = false; // Inicia as variaveis como false, e se apertar alguma tecla, elas são mudadas para true
            movimentoX = false; //

            teclado = Keyboard.GetState();

            if (apertou == false)                               //
            {                                                   //
                if (teclado.IsKeyDown(Keys.Space))              //
                {                                               //    Parte do código que desenha um inimigo sempre
                    apertou = true;                             //    que a tecla Space for pressionada
                    InimigoManager.criarInimigo(this.posicao);  //
                }                                               //
            }                                                   //
                                                                //
            if (teclado.IsKeyUp(Keys.Space))                    //
            {                                                   //
                apertou = false;                                //
            }                                                   //

            if (teclado.IsKeyDown(Keys.Up)) //Movimenta o personagem para cima
            {
                velocidade.Y = velocidade.Y - aceleracao.Y;
                movimentoY = true;
            }

            if (teclado.IsKeyDown(Keys.Down))  //Movimenta o personagem para baixo
            {
                velocidade.Y = velocidade.Y + aceleracao.Y;
                movimentoY = true;
            }

            if (teclado.IsKeyDown(Keys.Left))  //Movimenta o personagem para a esquerda
            {
                velocidade.X = velocidade.X - aceleracao.X;
                movimentoX = true;
            }

            if (teclado.IsKeyDown(Keys.Right))  //Movimenta o personagem para a direita
            {
                velocidade.X = velocidade.X + aceleracao.X;
                movimentoX = true;
            }

            velocidade.X = MathHelper.Clamp(velocidade.X, -max_velocidade.X, max_velocidade.X); // Limita a velocidade no máximo ao módulo da velocidade máxima
            velocidade.Y = MathHelper.Clamp(velocidade.Y, -max_velocidade.Y, max_velocidade.Y); //                             //

            if (movimentoX == false) // se nenhuma tecla foi apertada neste frame, a velocidade será igual a zero
            {
                velocidade.X = 0; //MathHelper.Lerp(velocidade.X, 0, atrito.X); // Diminui a velocidade através do atrito até chegar a zero
            }

            if (movimentoY == false)
            {
                velocidade.Y = 0; //MathHelper.Lerp(velocidade.Y, 0, atrito.Y);
            }

            posicao += velocidade;

        }

        public override void Draw(SpriteBatch spriteBatch) // função responsável por desenhar o personagem, possui as mesmas funcionalidades da classe base
        {
            base.Draw(spriteBatch);
        }
    }
}

